Chapter 2, float data type, 2 unix> cat float2.c #include #define DELTA 8 void printfloat(float); main() { float x; printf("\n Dec Hex +- exp+127 1. fraction\n\n"); for (x = -DELTA; x <= DELTA; x++) printfloat(x); printf("\n"); } void printfloat(float x) { unsigned long i; union floatandlong { float asfloat; long aslong; } bits32; bits32.asfloat = x; printf(" %12.2f %8.8x ", bits32.asfloat, bits32.aslong); for (i = 0x80000000ul; i > 0; i>>=1) { if (i == 0x40000000ul) printf(" "); if (i == 0x00400000ul) printf(" "); printf("%c", (i & bits32.aslong ? '1' : '0')); } printf("\n"); } unix> gcc float2.c unix> ./a.out Dec Hex +- exp+127 1. fraction -8.00 c1000000 1 10000010 00000000000000000000000 -7.00 c0e00000 1 10000001 11000000000000000000000 -6.00 c0c00000 1 10000001 10000000000000000000000 -5.00 c0a00000 1 10000001 01000000000000000000000 -4.00 c0800000 1 10000001 00000000000000000000000 -3.00 c0400000 1 10000000 10000000000000000000000 -2.00 c0000000 1 10000000 00000000000000000000000 -1.00 bf800000 1 01111111 00000000000000000000000 0.00 00000000 0 00000000 00000000000000000000000 1.00 3f800000 0 01111111 00000000000000000000000 2.00 40000000 0 10000000 00000000000000000000000 3.00 40400000 0 10000000 10000000000000000000000 4.00 40800000 0 10000001 00000000000000000000000 5.00 40a00000 0 10000001 01000000000000000000000 6.00 40c00000 0 10000001 10000000000000000000000 7.00 40e00000 0 10000001 11000000000000000000000 8.00 41000000 0 10000010 00000000000000000000000 unix>